<?php

require_once dirname(__FILE__).'/../lib/solicitudGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/solicitudGeneratorHelper.class.php';

/**
 * solicitud actions.
 *
 * @package    BecArTe
 * @subpackage solicitud
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class solicitudActions extends autoSolicitudActions
{
  //lista solicitudes del alumno actual
  public function executeMisSolicitudes(sfWebRequest $request){
    $this->solicitudes = $this->getUser()->getAlumno()->getSolicitudes();
    if(!count($this->solicitudes)) $this->getUser()->setFlash('notice','No hay solicitudes creadas.', false);
  }



  public function executeDelete(sfWebRequest $request)
  {
    if($this->getUser()->hasCredential('aspirante')) {
       if($this->getRoute()->getObject()->getAlumnoId()
             != $this->getUser()->getAlumnoId()) {
         $this->getUser()->setFlash('error','No puede eliminar solicitudes de otros aspirantes.');
         $this->redirect('mis_solicitudes');
         return;
       }
       if($this->getRoute()->getObject()->getEstado() != 'En Presentación') {
         $this->getUser()->setFlash('error','Sólo puede eliminar solicitudes en presentación.');
         $this->redirect('mis_solicitudes');
         return;
       }
    }
    $request->checkCSRFProtection();

    $this->dispatcher->notify(new sfEvent($this, 'admin.delete_object', array('object' => $this->getRoute()->getObject())));

    if ($this->getRoute()->getObject()->delete())
    {
      $this->getUser()->setFlash('notice', 'The item was deleted successfully.');
    }

    $this->redirect(
       $this->getUser()->hasCredential('aspirante')
         ? 'mis_solicitudes'
         : '@solicitud'
    );
  }


  public function executeEdit(sfWebRequest $request)
  {
    if($this->getUser()->hasCredential('aspirante')) {
       if($this->getRoute()->getObject()->getAlumnoId() != $this->getUser()->getAlumnoId()) {
         $this->getUser()->setFlash('error','No puede editar solicitudes de otros aspirantes.');
         $this->redirect('mis_solicitudes');
         return;
       }
       if($this->getRoute()->getObject()->getEstado() != 'En Presentación') {
         $this->getUser()->setFlash('error','Sólo puede editar solicitudes en presentación.');
         $this->redirect('mis_solicitudes');
         return;
       }
    }
    parent::executeEdit($request);
  }


  public function executeIndex(sfWebRequest $request)
  {
    //vencimiento, a falta de tarea programada...
    foreach(Doctrine_Core::getTable('Solicitud')->findAll() as $solicitud) {
      if($solicitud->getEstado() == 'En Presentación') {
        if ($solicitud->getCantidadRequisitosPendientes() &&  $solicitud->getCantidadDeDiasParaVencimiento() < 0) { 
            $solicitud->setEstado('Vencida'); 
            $solicitud->save(); 
        } 
      }
    }
    parent::executeIndex($request);
  }

  protected function buildQuery(){
    $qry = parent::buildQuery();    
    $filtros = $this->getFilters();
    if(isset($filtros['alumno'])) {
      $this->filters->setDefault('alumno', $filtros['alumno']);
    }
    return $qry;
  }



  //recibe el id del alumno elegido por parámetro
  public function executeNew(sfWebRequest $request)
  {
    if($request->hasParameter('alumno_id')) {
      if(Doctrine_Core::getTable('Beca')->getBecasEnInscripcion()->count()) {
        $this->solicitud = new Solicitud();
        $this->solicitud->setAlumnoId($request->getParameter('alumno_id'));
        $this->form = $this->configuration->getForm( $this->solicitud );
      } else {
        $this->getUser()->setFlash('error', 'No hay becas en período de inscripción.');
        $this->redirect('alumno');
      }
    } else {
      $this->getUser()->setFlash('error', 'Debe indicar un alumno para agregar la solicitud.');
      $this->redirect('alumno');
    }
  }



  /* Seteo el alumno y la beca porque:
   * - el titulo del form muestra al alumno, sino no lo recuperaba...
   * - si sólo queda el binding al id y no seteo el objeto, al grabarse el form se
   *   intenta insertar un nuevo alumno/beca con ese id y los otros campos nulos..  
   */
  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $values = $request->getParameter($form->getName());    
    $solic=$form->getObject();
    if(isset($values['alumno_id']))
      $solic->setAlumno( Doctrine_Core::getTable('alumno')->find( $values['alumno_id'] ));
    if(isset($values['beca_id']))
      $solic->setBeca( Doctrine_Core::getTable('beca')->find( $values['beca_id'] ));
    return parent::processform($request, $form);
  }
  
  
  
}
